<item name="Add-Items" key="add-items" id="{06089B3E-C727-4081-BDA3-AC0AD793E0E3}" tid="{DD22F1B3-BD87-4DB2-9E7D-F7A496888D43}" mid="{00000000-0000-0000-0000-000000000000}" sortorder="300" language="en" version="1" template="powershell script" parentid="{93CE70DD-D117-4139-AA02-F151E0F10935}" created="20190129T190916Z"><fields><field tfid="{BADD9CF9-53E0-4D0C-BCC0-2D784C282F6A}" key="__updated by" type="Single-Line Text"><content>sitecore\admin</content></field><field tfid="{8CDC337E-A112-42FB-BBB4-4143751E123F}" key="__revision" type="Single-Line Text"><content>b7e5412e-26a2-48a0-9bba-e5ce3693f66f</content></field><field tfid="{25BED78C-4957-4165-998A-CA1B52F67497}" key="__created" type="datetime"><content>20190129T190916Z</content></field><field tfid="{52807595-0F8F-4B20-8D2A-CB71D28C6103}" key="__owner" type="Single-Line Text"><content>sitecore\admin</content></field><field tfid="{D9CF14B1-FA16-4BA6-9288-E8A174D4D522}" key="__updated" type="datetime"><content>20190129T203431Z</content></field><field tfid="{B1A94FF0-6897-47C0-9C51-AA6ACB80B1F0}" key="script" type="Multi-Line Text"><content>function Add-Items {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0 )]
        [Sitecore.Install.PackageProject]$PackageProject,

        [Parameter(Mandatory = $true, Position = 1 )]
        [System.Xml.XmlElement]$Config		
    )

    begin {
        Write-Verbose "Cmdlet Add-Items - Begin"
        Import-Function Get-InstallMode
        Import-Function Get-MergeMode
        Import-Function Get-UnicornIncludes
        Import-Function Get-ItemsData
    }

    process {		
        Write-Verbose "Cmdlet Add-Items - Process"
        $sourceName = $Config.Name
        $index = 0 
        $unicornNodes = $Config.ChildNodes | ? { $_.Name -eq "unicorn" }
        foreach ($unicorn in $unicornNodes) {
            $unicornConfiguration = Get-UnicornConfiguration $pckConfig.unicornConfiguration
            $installMode = Get-InstallMode $unicorn
            $mergeMode = Get-MergeMode $unicorn
            $includes = Get-UnicornIncludes $unicorn $unicornConfiguration
			
            $explicitItemSources = $unicorn.ChildNodes | ? { $_.Name -eq "item" } | ? { $_.HasAttributes -eq $true }
            if ($explicitItemSources -ne $null) {
                Write-Verbose "$($unicorn.Include) has overwrites"
                foreach ($explicitItemDefinition in $explicitItemSources) {
					
                    if ($unicorn.include -eq "*") {
                        [item[]]$items = Get-ItemsData $unicornConfiguration | % { Get-Item -Path "$($_.DatabaseName):$($_.Path)" }
                    }
                    else {
                        [item[]]$items = Get-ItemsData $unicornConfiguration | ? { $_.Path.StartsWith($includes.Path, "CurrentCultureIgnoreCase") } | ? { $_.Database.Equals($includes.DatabaseName, "CurrentCultureIgnoreCase") } | % { Get-Item -Path "$($_.DatabaseName):$($_.Path)" }
                    }
                    foreach ($item in $items) {
                        if ($explicitItemDefinition.GetAttribute("path") -eq $item.Paths.Path) {
                            Write-Verbose "New-ExplicitItemSource[specific] $($item.Paths.Path)"
                            $source = $item | New-ExplicitItemSource -Name ($sourceName + $index) -InstallMode (Get-InstallMode $explicitItemDefinition) -MergeMode (Get-MergeMode $explicitItemDefinition)
                            $index++
                            $PackageProject.Sources.Add($source);
                        }
                        else {
                            Write-Verbose "New-ExplicitItemSource[default] $($item.Paths.Path)"
                            $source = $item | New-ExplicitItemSource -Name ($sourceName + " " + $index) -InstallMode $installMode -MergeMode $mergeMode
                            $index++
                            $PackageProject.Sources.Add($source);
                        }
                    }
                }
            }
            else {
				
                $method = $unicornConfiguration.GetType().GetMethods() | ? { $_.Name -eq "Resolve"} | ? { $_.ReturnType.Name -eq "T" } | Select-Object -First 1 				
                $IPredicate = $method.MakeGenericMethod([Unicorn.Predicates.IPredicate]).Invoke($unicornConfiguration, $null)
                $details = $IPredicate.GetConfigurationDetails()

                foreach ($configurationInfo in $details) {
                    $configValue = $configurationInfo.Value
                    $namedConfiguration = $configurationInfo.Key
					
                    $ok = $false
                    foreach ($IItemData in $includes) {
                        $concatenated = "$($IItemData.DatabaseName):$($IItemData.Path)"
                        if ($configValue -eq $concatenated) {
                            $ok = $true
                        }
                    }
					
                    if ($ok) {
                        Write-Verbose "[ALL][$namedConfiguration] $($configValue)"
                        $sourceItem = Get-Item $configValue
                        $sourceName = (($pckConfig.unicornConfiguration) + " - " + $namedConfiguration)
                        $source = New-ItemSource -Root ($sourceItem.Paths.Path) -Database ($sourceItem.Database) -Name $sourceName -InstallMode $installMode -MergeMode $mergeMode
                        $PackageProject.Sources.Add($source)
                    }
                    else {
                        $explicitSourceConfigName = $includes | ? { $_.Name -eq $namedConfiguration } | Select-Object -First 1
                        if ($explicitSourceConfigName) {
                            [item[]]$items = Get-ItemsData $unicornConfiguration | ? { $_.Path.StartsWith($explicitSourceConfigName.Path, "CurrentCultureIgnoreCase") } | ? { $_.DatabaseName.Equals($explicitSourceConfigName.DatabaseName, "CurrentCultureIgnoreCase") } | % { Get-Item -Path "$($_.DatabaseName):$($_.Path)" }
                            $index = 0
                            foreach ($item in $items) {
                                Write-Verbose "[Explicit][$namedConfiguration] $($item.Paths.Path)"
                                $sourceName = ((($pckConfig.unicornConfiguration) + " - " + $namedConfiguration) + $index)
                                $source = $item | New-ExplicitItemSource -Name $sourceName -InstallMode $installMode -MergeMode $mergeMode
                                $PackageProject.Sources.Add($source)
                                $index++
                            }
                        }
                    }
                }
            }
        }
    }

    end {
        Write-Verbose "Cmdlet Add-Items - End"
    }
}</content></field></fields></item>